# 使用官方的Python 3.10.16 slim镜像作为基础镜像
FROM python:3.10-slim-bullseye

# 更改为国内源（这里以阿里云为例） TODO:减少层数
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

# 更新apt-get依赖，安装编译mysqlclient所需的依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends  \
        default-libmysqlclient-dev=1.0.7  \
        build-essential=12.9  \
        pkg-config=0.29.2-1 && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

RUN useradd -m www -s /bin/bash && chown -R www /app &&\
    echo "export PATH=$PATH:/home/www" >> /etc/profile \
USER www

# 复制requirements.txt文件到容器中
COPY requirements.txt .

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# 升级pip并根据requirements.txt安装所有依赖
RUN pip install -r requirements.txt --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/

# 复制项目代码到容器中
COPY . .

# 设置环境变量，例如DJANGO_SETTINGS_MODULE
ENV DJANGO_SETTINGS_MODULE=mysite.settings

# 迁移数据库模型（确保在数据库可用时执行）, 收集静态文件TODO：新增Django启动脚本
RUN python manage.py migrate && python manage.py collectstatic --noinput

# 暴露端口
EXPOSE 8000

# 运行Gunicorn作为WSGI服务器
CMD ["gunicorn", "mysite.wsgi", "-c", "mysite/gunicorn_conf.py"]
